{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "常见的反爬措施：\n",
    "- 请求字段中的反爬：\n",
    "    1. 请求的字段 User-Agent\n",
    "    2. 请求的字段Referer。请求来源，防止资源盗用\n",
    "    3. 请求中特殊的字段信息\n",
    "- 请求进行中的反爬：\n",
    "    1. 请求时会把你的电脑IP带上，一旦请求过多，服务器会封你的IP\n",
    "    2. 请求时会把你的电脑IP带上，一旦请求过多，服务器要你验证，验证后才会给你数据\n",
    "- 响应中的反爬：\n",
    "    1. js的异步渲染，浏览器执行js，把js里面的内容，写到html中\n",
    "    2. 字体反爬，是特定的字体文件配合对应的编码，将网页的字体个性化，更好看\n",
    "\n",
    "常见的突破操作：\n",
    "- 请求字段中的突破操作：\n",
    "    1. 在请求中加上User-Agent\n",
    "    2. 请求中加上Referer\n",
    "    3. 根据网站的规则，将字段信息全部加上并请求【单个请求不好找，批量请求更难找】\n",
    "- 请求进行中的突破：\n",
    "    1. 切换代理IP\n",
    "    2. 配合服务器，处理这个验证码，可以是认为【不需要成本】，可以是及其自动处理【成本高，价格贵】\n",
    "- 响应中的突破：\n",
    "    1. 用Python调起浏览器，自动执行js渲染数据，用Python翻译js提取数据，使用正则表达式提取数据\n",
    "    2. 使用Python做逆向的字体解析，通过字体文件 + 网页的编码字段，分析出字体渲染后的内容"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "验证码：\n",
    "- 图形验证码\n",
    "- 滑块验证码\n",
    "- 点击验证码\n",
    "- 短信语音验证码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
